/**
 * 内部类的分类
 *      静态内部类
 *          1.实例化对象时,使用外部类名.静态内部类名 对象名 = new 外部类名.内部类名();
 *          2.静态内部类的成员方法中,只能访问外部类的静态成员变量
 *      实例内部类->demo1演示
 *      匿名内部类->demo1,Inner演示
 *      局部内部类->demo1,main方法局部内部类演示
 *
 * 接口使用实例
 *cloneable接口->demo2->Test2演示
 */
public class Test {
    public static void main(String[] args) {

    }
    public static void main3(String[] args) {

    }
    public static void main2(String[] args) {
        /**
         * 匿名内部类:是一种在声明和创建对象的同时定义类的方式,它没有显式的类名
         * 注意事项:
         *      1.通常用于继承或实现接口,且实例化的对象只能只用一次
         *      2.匿名内部类不能是抽象的,必须实现继承或实现接口的所有方法
         *      3.匿名内部类不能定义任何静态成员、静态初始化块。
         *      4.匿名内部类不能是public、protected、private、static。
         *      5.匿名内部类中的方法不能是抽象的，即必须重写所实现接口或继承的类的所有方法。
         */
    }
    public static void main1(String[] args) {
        /**
         * 实例内部类:未被static修饰的类
         *      注意事项:1.外部类中,所有成员变量都可以在内部成员方法中直接访问
         *             2.实例内部类也会受到修饰符的影响
         *             3.内部类方法访问同名成员变量时,优先访问自己的,没有再访问外部类,如果想要直接访问外部类,则需要使用外部类对象.this.外部类成员变量名
         *             4.实例化内部类对象方法为,外部类对象.new 外部类名();
         *             5.在实例内部类中,编译器会提供一个隐式的指向外部类的引用
         *             6.外部类想要访问内部类成员变量时,需要创建实例化内部类对象(方法为4)
         */
    }
}
